package in.rob.client.page;
import in.lib.Constants;
import in.lib.Debug;
import in.lib.adapter.DraftAdapter;
import in.lib.event.DeletePostDraftEvent;
import in.lib.event.NewPostDraftEvent;
import in.lib.event.UpdatedPostDraftEvent;
import in.lib.loader.base.Loader;
import in.lib.manager.CacheManager;
import in.model.DraftPost;
import in.model.Stream;
import in.model.base.NetObject;
import in.rob.client.dialog.NewPostDialog;
import in.rob.client.page.base.StreamFragment;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.squareup.otto.Subscribe;
public class DraftsPage extends StreamFragment implements OnItemClickListener
{
@Override public void retrieveArguments(Bundle savedInstanceState)
{
}
@Override public void setupAdapters()
{
if (getAdapter() == null)
{
setAdapter(new DraftAdapter(getContext(), new ArrayList<DraftPost>()));
}
else
{
setAdapter(getAdapter());
}
}
@Override public void initData()
{
new CacheLoader().execute();
}
@Override public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
getHeadedListView().setCanRefresh(false);
getEmptyListView().setCanRefresh(false);
}
@Override public void onDataReady()
{
hideProgressLoader();
}
@Override public void addLoadMoreView()
{
}
@Override public void removeLoadMoreView()
{
}
@Override public void fetchStream(String lastId, boolean append)
{
}
@Override public String getCacheFileName()
{
return "";
}
@Override public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
DraftPost post = (DraftPost)getAdapter().getItem(position - getHeadedListView().getHeaderViewsCount());
Intent editIntent = new Intent(getContext(), NewPostDialog.class);
editIntent.putExtra(Constants.EXTRA_NEW_POST_DRAFT, post.serialize());
getContext().startActivity(editIntent);
}
/**
* Checks the adapter sizes and removes the appropriate headers
*/
@Override public void checkAdapterSizes()
{
removeLoadMoreView();
}
@Override public String[] getResponseKeys()
{
return new String[]{};
}
public class CacheLoader extends Loader<Stream>
{
public CacheLoader()
{
super("");
}
@Override public Stream doInBackground()
{
try
{
Stream stream = new Stream();
File files = new File(CacheManager.getInstance().getCachePath());
String[] drafts = files.list(new FilenameFilter()
{
@Override public boolean accept(File dir, String filename)
{
return filename.startsWith("cache_" + Constants.CACHE_DRAFT_PREFIX);
}
});
Arrays.sort(drafts, Collections.reverseOrder());
for (String draft : drafts)
{
DraftPost post = CacheManager.getInstance().readFileAsObject(draft.replace("cache_", ""), DraftPost.class);
if (post != null)
{
stream.getObjects().add(post);
}
}
return stream;
}
catch (Exception e)
{
Debug.out(e);
return null;
}
}
@Override public void onPostExecute(Stream stream)
{
super.onPostExecute(stream);
if (getActivity() == null)
{
return;
}
if (stream != null && stream.getObjects().size() > 0)
{
getAdapter().setStream(stream);
getAdapter().notifyDataSetChanged();
}
stream = null;
checkAdapterSizes();
onDataReady();
}
}
@Override public View createPaddingView()
{
return new View(getContext());
}
/**************************************************
*
* OTTO EVENTS
*
**************************************************/
@Subscribe public void onDraftAdded(NewPostDraftEvent event)
{
prependItem(event.getPost());
}
@Subscribe public void onDraftDeleted(DeletePostDraftEvent event)
{
deleteItem(event.getPost());
}
@Subscribe public void onDraftUpdated(UpdatedPostDraftEvent event)
{
int pos = -1;
for (NetObject item : getAdapter().getItems())
{
pos++;
if (event.getPost().getDate() == ((DraftPost)item).getDate())
{
break;
}
}
if (pos > -1 && pos < getAdapter().getCount())
{
getAdapter().removeItemAt(pos);
getAdapter().addItem(pos, event.getPost());
getAdapter().notifyDataSetChanged();
}
}
}